<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>姓名案例-计算属性</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <!-- 
        总结：计算属性 
        定义：属性原本不存在，要通过原有的属性计算得来
        原理：使用了Object.defineProperty(targetobj,'property',{
            value:'',enumerable:false,configurable:false,writable:false,set(),set()})
        getter:里面的this指向vm，初次读取时被调用，有缓存，所依赖的数据发送改变时被调用
        setter：该改变所依赖的数据 才能改变计算属性
        优势 有缓存 ，在vm上可以直接使用
     -->
    <div id="root">
        姓：<input type="text" v-model="firstName"> <br>
        名：<input type="text" v-model="lastName"> <br>
        全名：{{fullName}}
    </div>
    
</body>
<script type="text/javascript">
    Vue.config.productionTip = false //以阻止 vue 在启动时生成生产提示。
    //创建Vue
    const vm = new Vue({
        el:'#root', 
        data:{
            firstName:'黎',
            lastName:'伟华',
        },
        computed:{
            fullName:{
                get(){
                    //这里的this 指向vm vue 已经帮我们写好了
                    return this.firstName.slice(0,3) + this.lastName
                },
                set(value){
                    console.log(value.split('-'))
                    this.firstName = arr[0]
                    this.lastName = arr[1]
                }
            }
            // getter 简写 一般情况下，我们只需要getter 要向改变值直接改变所依赖的值 ,不考虑修改时才能用简写
            // fullName:function(){
            //     return this.firstName.slice(0,3) + this.lastName
            // }
            // 在插值语法中 直接使用 fullName 表面上时一个函数，
            // 实际上执行了这个函数 往vm中放了一个叫fullName的属性，他的值是函数调用的结果
            // fullName(){
            //     return this.firstName.slice(0,3) + this.lastName
            // }

        }
    })

</script>
</html>